#ifndef _VECTOR_H_
#define _VECTOR_H_

#include "../../embeddable/Embeddable.h"

/*
	class : Vector<Data>
	desc : Creates a vector that can dynamically be
		resized. Follows the stl format for 
		the most part. If you want to use a different
		one be sure to implement it and change the back end.
*/
template<typename Data>
class Vector
{
	private:
		//array containing the data
		Data* array;
		//the current size of the vector
		unsigned int size1;
		//the max size of the vector
		unsigned int max_size;
		//determines if I will allow resizing
		unsigned char noResize;
		//determines if I will allocated the data.
		unsigned char allocated;
	public:
		//default constructor
		Vector();
		//constructor that sets the resize and max size
		Vector(unsigned char r, unsigned int max);
		//constructor that sets the array start and the max size
		Vector(Data* array, unsigned int s);
		//destructor for vector
		~Vector();
		//pushs an element to the back of the vector
		void push_back(Data d);
		//pops an element from the back of the vector
		Data pop_back();
		//gets an element at the index i
		Data& get(unsigned int i);
		//sets an element at the index i
		void set(unsigned int i , Data d);
		//gets the size of the vector
		unsigned int size();
		//resizes the vector.
		void resize();
		//determines if the vector is empty
		unsigned char empty();
		//determines if the vector is full
		unsigned char full();
		
		//copy constructor
		Vector(const Vector& v);
		//assignment operator
		Vector& operator=(const Vector& v);

		//convience operator for indexing
		Data& operator[](unsigned int i);
};



#include "Vector.cpp"

#endif
